#include <stdio.h>
#include <unistd.h>

int main()
{
  pid_t id =  fork();
  if(id == 0)
  {
    printf("ret : %d\n", id);
  }
  else 
  {
    printf("parent: id: %d\n", id);
  }
  return 0;
}


//int main()
//{
//  printf("before: pid is %d\n", getpid());
//  fork();
//  printf("After: pid is: %d, ppid is: %d\n", getpid(), getppid());
//  sleep(1);
//  return 0;
//}

//#include <stdio.h>
//#include <string.h>
//#include <stdlib.h>
//#include <unistd.h>
//
//int g_unval;
//int g_val = 100;
//
//int main(int argc, char *argv[], char *env[])
//{
//     int a = 10;
//     int b = 30;
//     printf("stack addr: %p\n", &a);
//     printf("stack addr: %p\n", &b);
// 
//     for(int i = 0; argv[i]; i++){
//         printf("argv[%d]: %p\n", i, argv[i]);
//     }
// 
//     for(int i =0; env[i] ;i++){
//         printf("env[%d]: %p\n", i, env[i]);
//     }
// 
//}

//#include <stdio.h>
//#include <unistd.h>
//#include <string.h>
//
//int main(int argc, char* argv[], char* env[])
//{
//  for(int i = 0; argv[i]; ++i)
//  {
//    printf("argv[%d]: %p\n", i, argv[i]);
//  }
//
//  for(int i = 0; env[i]; ++i)
//  {
//    printf("env[%d]: %p\n", i, env[i]);
//  }
//  return 0;
//}


//#include <stdio.h>
//#include <unistd.h>
//
//int g_val = 100;
//
//int main()
//{
//  //数据各自私有一份（写时拷贝）
//  if(fork() == 0)
//  {
//    int cnt = 5;
//    while(cnt)
//    {
//      printf("I am child, times: %d, g_val: %d, &g_val: %p\n", cnt, g_val, &g_val);
//      --cnt;
//      sleep(1);
//      if(cnt == 3)//cnt等于3的时候开始更改数据
//      {
//        printf("############child开始更改数据#############\n");
//        g_val = 200;
//        printf("############child更改数据完成#############\n");
//      }
//    }
//  }
//
//  else 
//  {
//    while(1)
//    {
//      printf("I am father, g_val = %d, &g_val = %p\n", g_val, &g_val);
//      sleep(1);
//    }
//  }
//  return 0;
//}
//












